<?php

include ('autoloading_classes.include.php');

/**
 * Classe rappresentativa di un Articolo
 *
 * \author Gianmarco Nalin
 * \date 02/01/2013
 */
class Article {
    
    //! Identificatore dell'articolo.
    /*!
     *  Se l'articolo è nuovo il valore non è definito.
     */
    private $id;
    
    //! Titolo dell'articolo.
    private $title;
    
    //! Abstract dell'articolo.
    private $abstract;
    
    //! Contenuto dell'articolo.
    private $content;
    
    //! Autore dell'articolo.
    private $author;
    
    //! Nome della foto quadrata utilizzata nella news.
    private $news_image;
    
    //! Nome della foto ad alta risoluzione utilizzata nella visualizzazione dell'articolo.
    private $article_image;
    
    //! Array di links relativi all'articolo.
    private $links;
    
    //! Variabile a vero se l'articolo appartiene alla Festa dei Giovani.
    private $is_fdg;
    
    //! Variabile a vero se l'articolo appartiene alla Festa dei Ragazzi.
    private $is_fdr;
    
    //! Timestamp di aggiunta.
    private $creation_timestamp;
    
    //! Timestamp di pubblicazione.
    private $publication_timestamp;
    
    //! Titolo utilizzato per la creazione dei link SEO.
    private $seo_title;
    
    //! Identificatore del creatore dell'articolo.
    private $creator;
    
    //! Il costruttore
    /*!
      Imposta al valore di default tutte le proprietà dell'oggetto: '' per le stringhe, null per gli oggetti, false per i boolean, 0 per gli interi.
    */
    public function __construct() {
        $this->id = 0;
        $this->title = '';
        $this->abstract = '';
        $this->content = '';
        $this->author = '';
        $this->news_image = '';
        $this->article_image = '';
        $this->links = '';
        $this->is_fdg = false;
        $this->is_fdr = false;
        $this->creation_timestamp = null;
        $this->pubblication_timestamp = null;
        $this->seo_title = '';
        $this->creator = 0;
    }
    
    //! Magic Method: getter.
    /*!
     * Lancia un'eccezione se la proprietà richiesta non esiste.
     * \param name Nome della proprietà.
    */
    public function __get($name) {
        if (property_exists($this, $name)) {
            return $this->{$name};
        } else {
            //throw new Exception("The $name property doesn't exist!");
        }
    }
    
    //! Magic Method: setter.
    /*!
      Lancia un'eccezione se la proprietà che si vuole modificare non esiste.
     * \param name Nome della proprietà.
     * \param value Nuovo valore da assegnare alla proprietà.
    */
    public function __set($name, $value) {
        if(property_exists($this, $name)) {
            $this->{$name} = $value;
        } else {
            //throw new Exception("The $name property doesn't exist!");
        }
    }
    
    
    //! Metodo che restituisce la rappresentazione HTML dell'articolo
    public function to_html($admin = false) { ?>
        <article>
            <?php 
                if ($admin) { ?>
            <a href="/eventijesolo/admin/article.php?action=edit&id=<?= $this->id ?>" class="btn btn-warning btn-large"><i class="icon-white icon-pencil"></i> Modifica Articolo</a>
                <?php
                }
            ?>
            <div id="title">
                <h1><?= $this->title ?></h1>
                <img src="<?= Site::APP_URL . Site::UPLOADS_URL . 'images/' . $this->article_image ?>" alt="<?= $this->title ?>" />
            </div>
            <div id="text">
                <ul class="unstyled" id="social_share">
                    <li><h2>Condividi</h2></li>
                    <li><div class="fb-like" data-href="<?= Site::BASE_URL . 'eventijesolo/' . $this->get_seo_link() ?>" data-send="false" data-layout="box_count" data-width="120" data-show-faces="false"></div></li>
                    <li><a href="https://twitter.com/share" class="twitter-share-button" data-lang="it" data-size="large">Tweet</a></li>
                    <li><div class="g-plusone" data-size="tall"></div></li>
                    <li><a href="http://pinterest.com/pin/create/button/?url=<?=  Site::BASE_URL . 'eventijesolo/' . $this->get_seo_link() ?>" class="pin-it-button" count-layout="vertical"><img border="0" src="//assets.pinterest.com/images/PinExt.png" title="Pin It" /></a></li>
                </ul>
                <?= $this->content ?>
                <p><?= $this->author ?></p>
            </div>
            
        </article>
    <?php
    }
    
    //! Metodo per ottenere il codice HMTL per la visualizzazione archivio dell'articolo.
    public function to_html_archive($admin = false) { 
        ?>
        <?= ($admin) ? '<div class="admin-element">' : ''?>
        <?php
            if ($admin) { ?>
                <div class="btn-group">
                    <a class="btn btn-warning btn-mini" href="<?=Site::BASE_URL . 'admin/article.php?action=edit&id=' . $this->id ?>"><i class="icon-white icon-pencil"></i></a>
                    <a class="btn btn-danger btn-mini" href="<?=Site::BASE_URL . 'admin/article.php?action=delete&id=' . $this->id ?>"><i class="icon-white icon-trash"></i></a>
                  </div>
            <?php
            }
        ?>
        <div class="media">
            <a href="#" class="pull-left">
                <img class="img-polaroid" src="<?=Site::APP_URL . Site::UPLOADS_URL . 'images/' . $this->news_image ?>" alt="<?= $this->title ?>" />
            </a>
            <div class="media-body">
                <h3 class="media-heading"><?= $this->title ?></h3>
                <div class="fb-like" data-href="<?= Site::BASE_URL . 'eventijesolo/' . $this->get_seo_link() ?>" data-send="false" data-layout="button_count" data-width="50" data-show-faces="false"></div>
                <a href="https://twitter.com/share" class="twitter-share-button" data-url="<?= Site::BASE_URL . 'eventijesolo/' . $this->get_seo_link() ?>" data-text="<?= $this->title ?>" data-lang="it">Tweet</a>
                <p><?= $this->abstract ?></p>
                <a href="<?= Site::BASE_URL . $this->get_seo_link()  ?>" class="btn btn-small">Leggi l'articolo</a>
            </div>
        </div>
        <?= ($admin) ? '</div>' : ''?>
    <?php
    }
    
    public static function get_seo_title($title) {
        $seo = '';
        $array = explode(" ", self::escape_string($title));
        $it = new CachingIterator(new ArrayIterator($array));
        foreach($it as $value) {
            if ($value != '') {
                $seo .= $value;
                if ($it->hasNext()) $seo .= '-';
            }
        }
        return strtolower($seo);
    }
    
    //! Metodo che restituisce il link ottimizzato SEO
    public function get_seo_link() {
        return "articoli/" . $this->seo_title . '/' . $this->id . '/';
    }

    private static function escape_string($string) {
        $escaping_chars = array("à", "á", "è", "é", "ì", "í", "ò", "ó", "ù", "ú", "/", "°", ",", ".", ":", ";", "?", "!", "-", "\n", "'", "+", "(", ")", '"');
        $replacing_chars = array("a", "a", "e", "e", "i", "i", "o", "o", "u", "u", " ", "", "", "", "", "", "", "", "", " ", " ", " ", " ", " ");
        return str_replace($escaping_chars, $replacing_chars, $string);
    }
}

?>
